Tutoriel Algo, partie 1

Introduction

Le langage Algo est conçu comme une extension de Javascript (JS), initialement prévu pour le débutant en algorithmique/programmation, pour minimiser son effort de frappe au clavier afin qu'il se concentre sur les problèmes à résoudre.

Il accepte aussi l'écriture des algorithmes avec la syntaxe JS. Les plus avancés —désireux d'écrire leurs algorithmes en Javascript— peuvent alors tirer profit de l'ouvrage de Marijn Haverbeke, accessible aussi en forme spécifique (accès par la clé usuelle) où les scripts sont plus directement exécutables.

Un script (ou programme) en Algo met en œuvre un algorithme qui exploite des données (dites d'entrée, dont l'utilisateur fait la saisie) pour arriver au résultat escompté, souvent affecté à une ou plusieurs variables, dites de sortie. Un algorithme est conçu en plusieurs étapes insécables que l'on appelle des instructions.

Un résultat n'est pas forcément un affichage à l'écran, car il peut très bien, par exemple dans un logiciel embarqué sur une automobile, se contenter de prendre en compte des données mécaniques pour commander la bonne injection de carburant dans les chambres de combustion : le conducteur de l'automobile ne se rend même pas compte qu'un tel programme est exécuté !

Dans la suite on utilisera algorithme comme synonyme de script, puisque nous n'utiliserons qu'un seul langage, Algo, orienté algorithmique. Pour le débutant, cette confusion n'a pas vraiment d'importance.

En effet, l'algorithmique en tant que discipline n'a vraiment de sens que dans les cours supérieurs, car on suppose d'une part exploiter une machine théorique aux capacités limitées, orientée calcul dans de nombreux cas, que l'apprenant sait déjà programmer et d'autre part qu'il ait un bagage mathématique non négligeable.

Comme tout langage, Algo se lit et s'écrit : c'est incontournable en programmation. Le langage est ici intensivement colorisé : presque tout ce que l'ordinateur est en mesure de comprendre est colorisé. Seuls les nombres, les virgules dans les listes et les nouvelles variables, définies par le concepteur d'un nouveau script, ne le sont pas.

Un script pouvant faire beaucoup de choses mais ne fournir (n'afficher en ce qui nous concerne) que peu d'informations, il est bon de chercher à comprendre ce qu'il va faire avant de l'exécuter (donc de le lire) et de l'analyser ensuite pour savoir comment on est arrivé à fournir certains résultats et pouvoir ainsi le modifier pertinemment (donc de l'écrire).

Dans ce tutoriel, tous les scripts sont éditables et exécutables directement dans le navigateur. Le seul moyen de progresser en algorithmique est de les modifier, en commençant modestement, afin d'être sûr de comprendre comment faire soi-même les choses par la suite, et pouvoir identifier et corriger ses erreurs. Enfin, on voit évoluer la colorisation au fur et à mesure des modifications, ce qui permet ainsi de détecter rapidement les erreurs de frappe et de fournir une aide à la mémorisation des mots-clés.

Les instructions afficher et effacer

Il est important de remarquer qu'on peut ajouter des commentaires en fin de ligne, tous précédés de // (double slash). Ceux-ci n'interviennent pas à l'exécution : leur but est de permettre au concepteur de préciser ce qu'il fait, en langage naturel.

On note aussi que chaque instruction est terminée par un ; et que l'affichage se fait dans un élément du document que l'on appelle le brouillon.

On fait attention à la ponctuation des listes : on n'oublie pas les virgules, comme ici.

Les chaînes de caractères permettent d'afficher des textes, par exemple pour compléter les résultats de certains calculs. Elles sont délimitées par des guillemets anglais que l'on appelle double quotes.

Enfin on note que le nombre π est noté PI (ou pi) et reconnu par le colorisateur comme étant une constante.

On peut effacer le brouillon (ou encore n'importe quel autre élément identifié du document) afin d'éviter de le faire manuellement à chaque exécution d'un script. En outre, on peut préciser une durée et un style d'affichage.

Il n'y a pas d'instruction d'affichage native en JS ni donc d'effacement d'un élément. Primitivement on ne peut que faire par exemple : alert("Affichage en cours !"), pour avertir le lecteur. Il faut alors bien comprendre qu'une telle alerte bloque l'exécution du script et même tout accès au document, jusqu'à ce que l'utilisateur décide de continuer. En Algo on utilise l'instruction équivalente pause, en général pour faire du debug. On peut évidemment la tester dans le script précédent et tous les suivants. Pour l'effacement du brouillon l'instruction JS serait plus élaborée : document.getElementById("le brouillon").innerHTML = '' ; pas facile à deviner, non ?

On peut aussi afficher des messages déplaçables à la souris, en fournissant une position initiale à l'écran, en notant bien que l'axe des ordonnées est orienté vers le bas. D'où l'exemple suivant, pour expérimenter une instruction complète d'affichage :

Mettre au point un algorithme pour décompter les secondes à l'écran à partir de 10, en rouge pour les nombres pairs et en bleu pour les nombres impairs. On pourra s'inspirer de l'exemple précédent et ajouter alignement:centré pour centrer chaque nombre dans son cadre.

Les variables et l'affectation

La notion de variable est essentielle en Informatique : chaque variable correspond à une case mémoire dont le contenu évolue au cours de l'exécution. On a déjà rencontré PI qui au contraire est une constante : c'est une case mémoire dont le contenu ne varie pas.

Pour mieux saisir cette notion, on peut utiliser l'analogie des boîtes aux lettres d'un immeuble : chaque boîte est parfaitement identifiée (désignée par un nom ou un numéro) et son contenu est variable, en général mis à jour chaque matin.

En Algo on déclare les variables avec le mot-clé variables (ou encore variable lorsqu'il n'y en a qu'une) suivi d'une liste de noms qui désignent (ou identifient) ces fameuses cases mémoire. On peut aussi utiliser var, comme en Javascript.

Mettre quelque chose dans une telle case mémoire est réalisé avec l'instruction d'affectation, définie par le symbole d'égalité, qui représente donc ici l'opérateur d'affectation.

Comme leur nom l'indique, on peut faire varier le contenu des variables ; on dit aussi qu'on les réaffecte. Une variable déclarée peut être initialement affectée. La première affectation à une variable est appelée initialisation.

Manipulation et saisie des données

Des expressions algébriques, comme sur une calculatrice

En général les expressions de calcul sont écrites comme sur les calculatrices, en particulier avec ^ pour mettre en exposant et avec les mêmes priorités des opérateurs. Néanmoins d'une part les multiplications ne sont pas implicites et d'autre part la racine carrée est la fonction appelée sqrt (square root en anglais, comme dans la plupart des langages informatiques) utilisée avec des parenthèses, suivant la même syntaxe qu'en Mathématique.

On note le changement de couleur des parenthèses pour les expressions imbriquées : pour chaque parenthèse ouvrante, la parenthèse fermante correspondante a forcément la même colorisation. La réciproque est fausse !

L'idée initiale d'un script exploitant des données pour fournir des résultats conduit à distinguer les variables qui contiennent les premières (l'ordinateur les lit) de celles qui reçoivent ces derniers (l'ordinateur les écrit). On parle aussi de variable d'entrée et de variable de sortie.

Cette séparation entre entrées et sorties est assez arbitraire puisque toute variable dont le contenu est fourni par l'utilisateur est bien écrite en mémoire, alors que c'est une donnée exploitée pour fournir un résultat, donc plutôt une variable d'entrée !

D'où la saisie possible des valeurs à affecter aux variables d'entrée.

Une donnée saisie par l'utilisateur

Comme l'utilisateur d'une application, si modeste soit-elle, n'a pas à connaître son algorithmique ni sa programmation pour s'en servir correctement, la saisie d'information est primordiale et doit être intelligible. En Algo on peut le faire simplement ; on peut même saisir des nombres sous forme algébrique, par exemple PI*(11 + 12/sqrt(13)).

Le nom sqrt est aussi celui de la fonction racine carrée pour le grapheur Desmos et pour XCAS.

Déterminer l'hypoténuse d'un triangle ABC rectangle en A, connaissant AB et AC (noms des variables à utiliser comme variables d'entrée, avec des valeurs saisies par l'utilisateur).

Écrire un algorithme qui calcule le volume d'une boule (en L) : variable d'entrée D, son diamètre (en cm), à saisir à l'exécution ; V est la variable de sortie.
Extension : utiliser la fonction round, qui arrondit un nombre à l'entier le plus proche, pour arrondir au cL près le volume affiché.

Les chaînes de caractères

Une fonction et un opérateur

Si nous avons déjà vu comment définir et utiliser des chaînes de caractères via une variable, nous ne savons pas encore les exploiter dans des expressions.

Pour ce faire on dispose d'une fonction essentielle, longueur qui retourne le nombre de caractères, et d'un opérateur, +, qu'on appelle concaténation et qui consiste à mettre des chaînes bout à bout.

En Algo/JS cet opérateur peut être utilisé aussi bien avec des nombres qu'avec des chaînes, d'une manière naturelle, comme on le voit avec le script suivant.

On retient simplement que "chat" + "pot" donne "chatpot" et que "deux" + 3 donne "deux3".

Affichage d'une liste ou d'une seule chaîne ?

On peut afficher une concaténation de valeurs plutôt que sa liste. La différence est minime mais sensible. Il faut donc l'expérimenter pour choisir judicieusement car l'affichage d'une liste ajoute des espaces parfois indésirables (on le verra dans le script 10).

Extraction de caractères d'une chaîne

Dans une chaîne de caractères comme ch = "Le chat mange.", le caractère "L" est en position 0 et l'espace en position 2. Pour extraire le caractère de position p de la chaîne ch on utilise une notation qui ressemble à celle des fonctions : ch[p].

On retient que la position (ou l'indice) du premier caractère d'une chaîne est toujours 0.

Concevoir un script qui, pour une chaîne ch que l'utilisateur aura saisie, affiche côte à côte et dans l'ordre de lecture : ses 4 premiers caractères, trois tirets, et ses 4 derniers caractères. On ne connaît donc pas sa longueur à l'avance…

Tutoriel Algo, partie 2

On peut à tout moment effacer ("le brouillon").